package com.teen9g.utils;

import com.teen9g.entity.User;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;

import java.nio.charset.StandardCharsets;
import java.util.Date;
import java.util.Map;

/**
 * JWT工具类
 */
public class JwtUtil {
    // 密钥
    private static final String SECRET = "dhahsdudhaudihauidhuai";

    /**
     * 根据用户信息生成 JWT 令牌
     *
     * @param user 用户信息
     * @return 生成的 JWT 令牌
     */
    public static String generateToken(User user, Map<String, Object> claims) {
        // 使用 Jwts.builder() 创建一个 JWT 构建器
        return Jwts.builder()
//                // 设置 JWT 的主题为用户的用户名
//                .setSubject(user.getUsername())
                .setClaims(claims)
                // 设置 JWT 的签发时间为当前时间
                .setIssuedAt(new Date())
                // 设置 JWT 的过期时间为当前时间往后推 1 小时
                .setExpiration(new Date(System.currentTimeMillis() + 10000 * 60 * 60))
                // 使用 HS256 算法和密钥 SECRET 对 JWT 进行签名
                .signWith(io.jsonwebtoken.SignatureAlgorithm.HS256, SECRET.getBytes(StandardCharsets.UTF_8))
                // 将 JWT 构建器压缩成字符串并返回
                .compact();
    }

    /**
     * 登录验证
     *
     * @param token
     * @return
     */
    public static Claims parseToken(String token) {
        // 使用 Jwts.parser() 创建一个 JWT 解析器
        return Jwts.parser()
                // 设置 JWT 解析器使用的密钥 SECRET
                .setSigningKey(SECRET.getBytes(StandardCharsets.UTF_8))
                // 解析 JWT 字符串并返回解析后的 Claims 对象
                .parseClaimsJws(token)
                .getBody();
    }
}

